
package com.microsoft.mcp.sample.server.service;

import io.modelcontextprotocol.client.McpSyncClient;
import io.modelcontextprotocol.spec.McpSchema;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * ==============================================================================
 * MCP 知识库集成服务 (参考 CalculatorService.java 风格)
 * ==============================================================================
 * 
 * 这个文件是与 MCP 向量化服务器集成的核心。它采用您项目中 `CalculatorService.java`
 * 的风格，将所有对外暴露的工具定义为带 `@Tool` 注解的 Service 方法。
 *
 * ### 设计思路:
 * 1.  **内聚性**: 所有与 MCP 知识库相关的 Agent 工具、配置和测试端点都集中在此文件中，便于管理。
 * 2.  **`@Tool` 注解**: 每个可以被 Agent 调用的功能（如搜索、添加文档）都是一个带有 `@Tool` 注解的
 *     公共方法。Spring AI 会自动扫描这些注解，并将它们作为可用工具提供给大语言模型。
 * 3.  **HTTP 通信**: 底层通过 Spring WebClient 与运行中的 Python MCP 服务器进行异步 HTTP 通信。
 *
 */
@Service
public class McpKnowledgeService {
    @Autowired
    private McpSyncClient knowledgeClient;
    @Tool(description = "search in text")
    public String search_similar(String query) {
        McpSchema.CallToolRequest callToolRequest = new McpSchema.CallToolRequest(
                "search_similar",
                Map.of(
                        "query", query,
                        "content_types", new String[]{"text"},
                        "top_k",5,
                        "similarity_threshold",0.6
                ));
        McpSchema.CallToolResult toolResult=knowledgeClient.callTool(callToolRequest);
        return toolResult.toString();
    }

    /**
     * Get help about available calculator operations
     * @return Information about available operations
     */
    @Tool(description = "Get help about available search operations")
    public String search_mcp_help() {
        System.out.println("request handle success");
        return "Basic Search MCP Service\n\n" +
                "Available operations:\n" +
                "1. search_similar(String query) - search similar contnt in text\n";
    }





}


